home *** CD-ROM | disk | FTP | other *** search
/ Programmer Plus 2007 / Programmer-Plus-2007.iso / Programming / Borland Plateform / Turbo Pascal V7.0 / DOCDEMO.ZIP / WORKLIST.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1992-10-30  |  3.0 KB  |  134 lines

  1. {************************************************}
  2. {                                                }
  3. {   Demo program                                 }
  4. {   Copyright (c) 1992 by Borland International  }
  5. {                                                }
  6. {************************************************}
  7.  
  8. program WorkList;
  9.  
  10. {$IFDEF Windows}
  11. uses WinCrt, Workers;
  12. {$ELSE}
  13. uses Workers;
  14. {$ENDIF}
  15.  
  16. const
  17.   CompanyName = 'Sand Tech, Inc.';
  18.  
  19. type
  20.   { Linked list management objects }
  21.   PNode = ^TNode;
  22.   TNode = record
  23.     Item: PEmployee;
  24.     Next: PNode;
  25.   end;
  26.  
  27.   PStaffList = ^TStaffList;
  28.   TStaffList = object
  29.     Nodes: PNode;
  30.     constructor Init;
  31.     destructor Done; virtual;
  32.     procedure Add(Item: PEmployee);
  33.     procedure Report;
  34.   end;
  35.  
  36. { TStaffList }
  37. constructor TStaffList.Init;
  38. begin
  39.   Nodes := nil;
  40. end;
  41.  
  42. destructor TStaffList.Done;
  43. var
  44.   N: PNode;
  45. begin
  46.   while Nodes <> nil do
  47.   begin
  48.     N := Nodes;
  49.     Nodes := N^.Next;
  50.     Dispose(N^.Item, Done);
  51.     Dispose(N);
  52.   end;
  53. end;
  54.  
  55. procedure TStaffList.Add(Item: PEmployee);
  56. var
  57.   N: PNode;
  58. begin
  59.   New(N);
  60.   N^.Item := Item;
  61.   N^.Next := Nodes;
  62.   Nodes := N;
  63. end;
  64.  
  65. procedure TStaffList.Report;
  66.  
  67. procedure PadString(S: String; PadLen: Integer);
  68. begin
  69.   Write(S, ' ':PadLen - Length(S));
  70. end;
  71.  
  72. var
  73.   Current: PNode;
  74.   TotalPayAmount: Real;
  75.   StaffCount: LongInt;
  76. begin
  77.   { Report header }
  78.   TotalPayAmount := 0;
  79.   StaffCount := 0;
  80.   Writeln;
  81.   Writeln(' ':35 - Length(CompanyName), CompanyName, ' Payroll Report');
  82.   Writeln;
  83.   PadString('Name', 30);
  84.   PadString('Title', 30);
  85.   Writeln('Pay amount');
  86.   PadString('----', 30);
  87.   PadString('-----', 30);
  88.   Writeln('----------');
  89.  
  90.   { Traverse linked list, dump payroll report for each worker }
  91.   Current := Nodes;
  92.   while Current <> nil do
  93.     with Current^.Item^ do
  94.     begin
  95.       Inc(StaffCount);
  96.       TotalPayAmount := TotalPayAmount + GetPayAmount;
  97.       Show;
  98.       Current := Current^.Next;
  99.     end;
  100.  
  101.   { Report summary }
  102.   Writeln;
  103.   Writeln('Number of employees:     ', StaffCount:15);
  104.   Writeln('Total payroll amount:    ', TotalPayAmount:15:2);
  105.   Writeln('Estimated annual payroll:', TotalPayAmount * PayPeriods:15:2);
  106.   Writeln;
  107. end;
  108.  
  109. var
  110.   TotalPayAmount: Real;
  111.   Staff: TStaffList;
  112.  
  113. begin
  114.   { Create an empty list }
  115.   Staff.Init;
  116.  
  117.   { Now create and add several workers to the staff list }
  118.   Staff.Add(New(PHourly, Init('Von Staadt, Alfred',
  119.     'Word processor', 8.35, 80)));
  120.   Staff.Add(New(PHourly, Init('Karlon, Allison',
  121.     'Fork lift operator', 12.95, 80)));
  122.   Staff.Add(New(PCommissioned, Init('Smith, Sam "Snake oil"',
  123.     'Direct Sales', 30000, 0.03, 89743)));
  124.   Staff.Add(New(PSalaried, Init('Gomez, Rosa',
  125.     'Managing Editor', 56000)));
  126.   Staff.Add(New(PSalaried, Init('Carter, Cynthia', 'CEO', 110000)));
  127.  
  128.   { Traverse the list and produce a payroll report }
  129.   Staff.Report;
  130.  
  131.   { Deallocate list and its contents with one destructor call }
  132.   Staff.Done;
  133. end.
  134.